#ifndef __REMOTE_H
#define __REMOTE_H

#include "./SYSTEM/sys/sys.h"

/* ------------------------------------------------- 红外接收引脚定义 ----------------------------------------------- */

/* 红外接收引脚定义 */
#define REMOTE_IN_GPIO_PORT                     GPIOA                                       /* 红外接收引脚端口 */
#define REMOTE_IN_GPIO_PIN                      GPIO_PIN_1                                  /* 红外接收引脚号 */
#define REMOTE_IN_GPIO_CLK_ENABLE()             do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* GPIO时钟使能 */

/* 红外接收定时器定义 */
#define REMOTE_IN_TIMX                          TIM5                                        /* 定时器选择 */
#define REMOTE_IN_TIMX_IRQn                     TIM5_IRQn                                   /* 定时器中断号 */
#define REMOTE_IN_TIMX_IRQHandler               TIM5_IRQHandler                             /* 中断服务函数名 */
#define REMOTE_IN_TIMX_CHY                      TIM_CHANNEL_2                               /* 定时器通道 */
#define REMOTE_IN_TIMX_CCRY                     REMOTE_IN_TIMX->CCR2                        /* 捕获比较寄存器 */
#define REMOTE_IN_TIMX_CHY_CLK_ENABLE()         do{ __HAL_RCC_TIM5_CLK_ENABLE(); }while(0)  /* 定时器时钟使能 */

/* ------------------------------------------------- 红外信号读取宏 ------------------------------------------------- */

#define RDATA           HAL_GPIO_ReadPin(REMOTE_IN_GPIO_PORT, REMOTE_IN_GPIO_PIN)           /* 红外接收头数据引脚状态 */

/* ------------------------------------------------- 红外遥控器配置 ------------------------------------------------- */

/**
 * @brief 红外遥控器识别码定义
 * @note  每款遥控器都有唯一的识别码，用于区分不同的遥控器
 *        本驱动使用的遥控器识别码为0，实际使用时需要根据遥控器修改
 *        NEC协议中识别码占用2个字节，范围0x0000~0xFFFF
 */
#define REMOTE_ID       0x0000  /* 遥控器识别码 */

/* ------------------------------------------------- 全局变量声明 --------------------------------------------------- */

extern TIM_HandleTypeDef g_tim5_handle; /* TIM5定时器句柄 */
extern uint8_t g_remote_sta;            /* 遥控器接收状态标志 */
extern uint32_t g_remote_data;          /* 红外接收到的数据 */
extern uint8_t g_remote_cnt;            /* 按键按下的次数 */

/* ------------------------------------------------- 函数声明 ------------------------------------------------------ */

void remote_init(void);         /* 红外遥控器初始化 */
uint8_t remote_scan(void);      /* 红外遥控器扫描 */
void ScanRemoteTask(void);      /* 红外遥控器扫描任务 */

#endif
